import enum
from message_broker.const import UserRole, UserGroup  # noqa: F401


@enum.unique
class DeviceType(enum.Enum):
    """设备类型
    """
    DEFAULT = 0
    LOCAL_BROKER = 1  # 本地中控
    MAIN_SCREEN = 2  # 主屏幕
    SUB_SCREEN = 3  # 辅屏幕
    MAIN_CRMERA = 4  # 主摄像头


def dt_to_sr_value(device_type):
    return device_type.value + 10


@enum.unique
class SessionRole(enum.Enum):
    """用户身份和设备类型混合后的类型

    吐槽: 原来的中控项目是什么傻逼设计
          非得对几个属性进行排列组合构成新属性
    接入中控的客户端有用户和设备
      * 用户的角色有老师、学员、游客
      * 设备的类型有本地中控、主屏幕等
    原来的中控代码进行了属性的排列组合
      * 把用户角色和设备类型混合搞了一个identity
      * 把客户端和设备类型混合搞了下面的type
    """

    GUEST = 0
    TEACHER = 1
    STUDENT = 2
    LOCAL_BROKER = dt_to_sr_value(DeviceType.LOCAL_BROKER)
    MAIN_SCREEN = dt_to_sr_value(DeviceType.MAIN_SCREEN)
    SUB_SCREEN = dt_to_sr_value(DeviceType.SUB_SCREEN)
    MAIN_CRMERA = dt_to_sr_value(DeviceType.MAIN_CRMERA)

    @classmethod
    def from_user_role(cls, user_role):
        return cls(user_role.value)

    @classmethod
    def from_device_type(cls, device_type):
        return cls(cls.get_value_from_device_type(device_type))

    @staticmethod
    def get_value_from_device_type(device_type):
        return dt_to_sr_value(device_type)


@enum.unique
class UnitType(enum.Enum):
    COURSE = 1
    ACTIVITY = 2
    PERSONAL_LIVE = 3


@enum.unique
class UnitStatus(enum.Enum):
    NOT_STARTED = 0
    ON_GOING = 1
    FINISHED = 2


@enum.unique
class SessionType(enum.Enum):
    """当前接入 WebSocket 的用户类型，是用户或设备
    """
    USER = 1
    DEVICE = 2
